
import kotlin.math.absoluteValue

/**
 * 类的初始化
 *  构造函数
 *   在主构造函数中定义属性  var val    减少重复代码  this.xx = xx
 *  次构造函数
 *
 */
fun main() {

//    val player = Player6("jerry", 19, 0, true)
////    player.name = "rose"
//    println(player.name)
//    println(player.isNormal)

    val player2 = Player6("Hoooyor",108)
    println(player2.name)
    println(player2.isNormal)
    println(player2.age)


}

/**
 * 主构造函数
 *  临时变量用下划线   _name
 */
class Player6(
    _name: String, var age: Int, var isNormal: Boolean

){
    //属性策略
    var name = _name
        get() = field.capitalize()
        private set(value) {
            field = value.trim()
        }
//        get() = age.absoluteValue
//        set(value) {
//            field = age.absoluteValue
//        }
//        get() = field.toInt()
//        set(value) {
//            field = value.toInt()
//        }

    //TODO:这里可以省略，直接在主构造函数中定义
//    var sex = _sex
//    var isNormal = _isNormal


    //TODO:次构造函数  关键字：constructor
    //我们可以定义多个次构造函数来配置不同的参数组合

    constructor(_name:String) : this(_name,age=100,isNormal=false)
    //初始化代码逻辑
    constructor(_name: String,age: Int) : this(_name,age=99,isNormal=false){
        this.name = _name.toUpperCase()
    }



}

